home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / [BreakoutD187349472005.psc / DXMain.bas < prev    next >
BASIC Source File  |  2005-04-06  |  5KB  |  213 lines

  1. Attribute VB_Name = "DXMain"
  2. '---------------------------------------------------------------------------------------
  3. ' Module    : DXMain
  4. ' DateTime  : 4/2/2005 12:27
  5. ' Author    : Jason
  6. ' Purpose   : The main DX setup form
  7. '---------------------------------------------------------------------------------------
  8.  
  9. Option Explicit
  10.  
  11. Public dx As DirectX7
  12. Public dd As DirectDraw7
  13. Public PixFormat As DDPIXELFORMAT
  14.  
  15. Private Primary As DirectDrawSurface7
  16. Public Backbuffer As DirectDrawSurface7
  17.  
  18.  
  19. Public bRECT As RECT             'Backbuffer RECT
  20.  
  21.  
  22. Private ddsd1 As DDSURFACEDESC2  'Primary surface description
  23. Public ddsd4 As DDSURFACEDESC2   'Backbuffer surface description
  24.  
  25. Public bRunning As Boolean       'For the main loop
  26. Public bRestore As Boolean       'For restoring surfaces
  27. Public bInit As Boolean          'Has DirectDraw been initialized?
  28.  
  29. Public bkColor As Long           'The fill color for the Backbuffer
  30. Public lMagenta As Long          'The color key (magenta)
  31.  
  32. Public DX_WIDTH As Long          'DX screen width
  33. Public DX_HEIGHT As Long         'DX screen height
  34. Public DX_BPP As Long            'DX bits per pixel
  35.  
  36. Public Sub InitDX()
  37.  
  38.     On Error GoTo errOut
  39.     
  40.     Set dx = New DirectX7
  41.     Set dd = dx.DirectDrawCreate("")
  42.     
  43.     'indicate that we dont need to change display depth
  44.     Call dd.SetCooperativeLevel(frmDX.hwnd, DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)
  45.     
  46.     'Set the display mode
  47.     dd.SetDisplayMode DX_WIDTH, DX_HEIGHT, DX_BPP, 0, DDSDM_DEFAULT
  48.     
  49.     'get the screen surface and create a back buffer too
  50.     ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
  51.     ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
  52.     ddsd1.lBackBufferCount = 1
  53.     
  54.     'Create the primary surface
  55.     Set Primary = dd.CreateSurface(ddsd1)
  56.     
  57.     'Attach a Backbuffer to the primary surface
  58.     Dim caps As DDSCAPS2
  59.     caps.lCaps = DDSCAPS_BACKBUFFER
  60.     Set Backbuffer = Primary.GetAttachedSurface(caps)
  61.     
  62.     'Get the backbuffer surface description
  63.     Backbuffer.GetSurfaceDesc ddsd4
  64.     
  65.     'We create a DrawableSurface class from our backbuffer
  66.     'that makes it easy to draw text
  67.     Backbuffer.SetForeColor vbGreen
  68.     Backbuffer.SetFontTransparency True
  69.     
  70.     'For getting the 16-bit long color value
  71.     GetColorShiftValues Primary '<- For getting the 16-bit RGB long
  72.     
  73.     'Get the pixel format of the primary surface
  74.     Primary.GetPixelFormat PixFormat
  75.     
  76.     'Set the lMagenta color key
  77.     lMagenta = PixFormat.lRBitMask + PixFormat.lBBitMask
  78.     
  79.     'Set the bkColor to orange
  80.     bkColor = 0 'DDRGB(200, 100, 0)
  81.     
  82.        'Set up a Backbuffer RECT
  83.     bRECT.Bottom = DX_HEIGHT
  84.     bRECT.Right = DX_WIDTH
  85.     
  86.     'Initialization is done
  87.     bInit = True
  88.      
  89.     Exit Sub
  90. errOut:
  91.     Debug.Print "InitDX ; " & Err.Number & " ; " & Err.Description
  92.     bInit = False
  93.     
  94.     'If there's an error...
  95.     EndIt
  96.     
  97. End Sub
  98.  
  99. Public Sub EndIt()
  100.  
  101.     'Turn off the main loop
  102.     bRunning = False
  103.     
  104.     'Restore the prior display mode
  105.     Call dd.RestoreDisplayMode
  106.     Call dd.SetCooperativeLevel(frmDX.hwnd, DDSCL_NORMAL)
  107.     
  108.     'Destroy objects and surfaces
  109.     Set dd = Nothing
  110.     Set dx = Nothing
  111.     Set Primary = Nothing
  112.     Set Backbuffer = Nothing
  113.     KillSurfaces
  114.     StopBeatz
  115.     
  116.     'Unload forms
  117.     Unload frmDX
  118.     Unload Form1
  119.     
  120.     End
  121.     
  122. End Sub
  123.  
  124. Public Sub Render(ByVal X As Long, ByVal Y As Long, _
  125.    ByVal Surface As DirectDrawSurface7, srcRECT As RECT, _
  126.    ByVal Transparent As Boolean, Optional Stretch As Boolean = False)
  127.    
  128.    On Error GoTo errOut
  129.    
  130.    If Stretch Then
  131.    
  132.       Dim temp As RECT
  133.       
  134.       temp.Right = DX_WIDTH
  135.       temp.Bottom = DX_HEIGHT
  136.       
  137.       If Transparent Then
  138.          Backbuffer.Blt temp, Surface, srcRECT, DDBLT_KEYSRC Or DDBLT_WAIT
  139.       Else
  140.          Backbuffer.Blt temp, Surface, srcRECT, DDBLT_WAIT
  141.       End If
  142.       
  143.       Exit Sub
  144.       
  145.    End If
  146.       
  147.    
  148.    'If DirectDraw is not initialized then skip this procedure
  149.    If bInit = False Then Exit Sub
  150.    
  151.    If Transparent = True Then
  152.       Backbuffer.BltFast X, Y, Surface, srcRECT, DDBLTFAST_SRCCOLORKEY Or DDBLTFAST_WAIT
  153.    Else
  154.       Backbuffer.BltFast X, Y, Surface, srcRECT, DDBLTFAST_WAIT
  155.    End If
  156.    
  157.    Exit Sub
  158. errOut:
  159.    
  160.    Debug.Print "Render ; " & Err.Number & " ; " & Err.Description
  161.  
  162. End Sub
  163.  
  164. Public Sub Flip()
  165.  
  166.     'flip the backbuffer to the screen
  167.     Primary.Flip Nothing, DDFLIP_WAIT
  168.     
  169. End Sub
  170.  
  171. Public Sub FillBackGround()
  172.  
  173.    'Fill the Backbuffer with the orange color
  174.    Call Backbuffer.BltColorFill(bRECT, bkColor)
  175.    
  176. End Sub
  177.  
  178. Public Sub CheckForLostSurfaces()
  179.  
  180.     'this will keep us from trying to blt in case we lose the surfaces (alt-tab)
  181.     bRestore = False
  182.     Do Until ExModeActive
  183.         myDoEvents 0
  184.         bRestore = True
  185.     Loop
  186.  
  187.     ' if we lost and got back the surfaces, then restore them
  188.     If bRestore Then
  189.         bRestore = False
  190.         dd.RestoreAllSurfaces
  191.         InitSurfaces
  192.     End If
  193.  
  194. End Sub
  195.  
  196. Private Function ExModeActive() As Boolean
  197.  
  198.     Dim TestCoopRes As Long
  199.     
  200.     TestCoopRes = dd.TestCooperativeLevel
  201.     
  202.     If (TestCoopRes = DD_OK) Then
  203.         ExModeActive = True
  204.     Else
  205.         ExModeActive = False
  206.     End If
  207.     
  208. End Function
  209.  
  210.  
  211.  
  212.  
  213.